]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
recorder: keep recorder object alive until pipeline finishes
authorRay Strode <rstrode@redhat.com>
Thu, 26 Jul 2012 21:26:55 +0000 (17:26 -0400)
committerRay Strode <rstrode@redhat.com>
Fri, 26 Oct 2012 17:29:30 +0000 (13:29 -0400)
We want to make sure the recorder isn't finalized until the
saved recording hits disk.  This means the pipeline object needs
a hard reference on the recorder.

https://bugzilla.gnome.org/show_bug.cgi?id=680647

src/shell-recorder.c

index 9dd74828219661908f43c63cb71adc7e61fcb437..3a72ef53a06e988ac72b794fab1bc78741275fad 100644 (file)
@@ -269,18 +269,6 @@ static void
 shell_recorder_finalize (GObject  *object)
 {
   ShellRecorder *recorder = SHELL_RECORDER (object);
-  GSList *l;
-
-  for (l = recorder->pipelines; l; l = l->next)
-    {
-      RecorderPipeline *pipeline = l->data;
-
-      /* Remove the back-reference. The pipeline will be freed
-       * when it finishes. (Or when the process exits, but that's
-       * out of our control.)
-       */
-      pipeline->recorder = NULL;
-    }
 
   if (recorder->update_memory_used_timeout)
     g_source_remove (recorder->update_memory_used_timeout);
@@ -1344,6 +1332,8 @@ recorder_pipeline_free (RecorderPipeline *pipeline)
   if (pipeline->outfile != -1)
     close (pipeline->outfile);
 
+  g_clear_object (&pipeline->recorder);
+
   g_free (pipeline);
 }
 
@@ -1452,7 +1442,7 @@ recorder_open_pipeline (ShellRecorder *recorder)
   GstBus *bus;
 
   pipeline = g_new0(RecorderPipeline, 1);
-  pipeline->recorder = recorder;
+  pipeline->recorder = g_object_ref (recorder);
   pipeline->outfile = - 1;
 
   pipeline_description = recorder->pipeline_description;